package com.hdphone.zljutils.inter;

/**
 * @author sq
 * @date 2020/10/19
 * @describe
 */
public interface INumberUtil {

    /**
     * 字符串转int
     *
     * @param s
     * @return
     */
    int string2Int(String s);

    /**
     * 提供精确的字符串转double
     *
     * @param s
     * @return
     */
    double getDouble(String s);

    /**
     * 提供精确的加法运算
     *
     * @param v1 被加数
     * @param v2 加数
     * @return 两个参数的和
     */
    double add(double v1, double v2);

    /**
     * 提供精确的加法运算
     *
     * @param v1 被加数
     * @param v2 加数
     * @return 两个参数的和
     */
    double add(String v1, String v2);

    /**
     * 提供精确的减法运算
     *
     * @param v1 被减数
     * @param v2 减数
     * @return 两个参数的差
     */
    double substract(double v1, double v2);

    /**
     * 提供精确的减法运算
     *
     * @param v1 被减数
     * @param v2 减数
     * @return 两个参数的差
     */
    double substract(String v1, String v2);

    /**
     * 提供精确的乘法运算
     *
     * @param v1 被乘数
     * @param v2 乘数
     * @return 两个参数的积
     */
    double multiply(double v1, double v2);

    /**
     * 提供精确的乘法运算
     *
     * @param v1 被乘数
     * @param v2 乘数
     * @return 两个参数的积
     */
    double multiply(String v1, String v2);

    /**
     * 提供（相对）精确的除法运算，当发生除不尽的情况时,
     * 精确到小数点以后10位以后的数字四舍五入
     *
     * @param v1 被除数
     * @param v2 除数
     * @return 两个参数的商
     */
    double divide(double v1, double v2);

    /**
     * 提供（相对）精确的除法运算
     * 当发生除不尽的情况时,由scale参数决定精确小数点以后的数字四舍五入
     *
     * @param v1    被除数
     * @param v2    除数
     * @param scale 表示要精确到小数点以后几位
     * @return 两个参数的商
     */
    double divide(double v1, double v2, int scale);

    /**
     * 提供精确的小数位四舍五入处理
     *
     * @param v     原四舍五入的数
     * @param scale 小数点后保留几位
     * @return 四舍五入后的结果
     */
    double round(double v, int scale);

    /**
     * 提供精确的小数位四舍五入处理  默认2
     *
     * @return 四舍五入后的结果
     */
    double round(double v);

    /**
     * 搜索出输入值最接近的范围内的某一个值
     *
     * @param key 输入的值
     * @param arr 值范围
     * @return 搜索到的索引
     */
    double searchNearValue(double key, Double[] arr);

    /**
     * 保留两位小数
     *
     * @param d
     * @return
     */
    String reserve2Decimals(double d);

    /**
     * 是否全为数字
     *
     * @param str
     * @return
     */
    boolean isNumeric(String str);
}
